package com.keensense.vcm.internal;

import java.io.ByteArrayInputStream;
import java.io.InputStream;

import com.keensense.vcm.HttpMethod;
import com.keensense.vcm.common.auth.CredentialsProvider;
import com.keensense.vcm.common.comm.RequestMessage;
import com.keensense.vcm.common.comm.ServiceClient;
import com.keensense.vcm.common.parser.ResponseParsers;
import com.keensense.vcm.model.SearchAlarmRequest;
import com.keensense.vcm.model.SearchAlarmResponse;

/**
 * @author lanjian
 * @date 2020/5/27 5:03 下午
 */
public class AlarmOperation extends VCMOperation {
    public AlarmOperation(ServiceClient client, CredentialsProvider credsProvider) {
        super(client, credsProvider);
    }

    /**
     * <P>
     * 1、查询历史告警信息
     * </P>
     * <p>
     * 2、新增可根据布控名单类型、算法编码或者命中类型查询告警信息
     * </p>
     * <p>
     * 3、支持pageSize=0，当pageSize=0是只返回总数，且是精确的
     * </p>
     * <p>
     * 4、新增返回摄像机的经纬度信息
     * </p>
     * <p>
     * 5、新增返回布控Id的列表
     * </p>
     * <p>
     * 6、VCM北向接口请求中可能新增可选字段，或响应中增加字段。 ISV客户端需支持过滤不使用的新增字段，进行兼容性处理
     * </p>
     * <p>
     * 7、接口响应增加url字段，用于下载布控名单图片
     * </p>
     * <p>
     * 8、接口响应增加suspectPictureId字段，表示布控图片id
     * </p>
     * 
     * @param searchAlarmRequest
     * @return
     */
    public SearchAlarmResponse searchAlarm(SearchAlarmRequest searchAlarmRequest) {
        String xml = getXmlFromObject(searchAlarmRequest, SearchAlarmRequest.class);
        InputStream in = new ByteArrayInputStream(xml.getBytes());
        RequestMessage request = new VCMRequestMessageBuilder(getInnerClient()).setInputStream(in)
            .setInputSize(xml.getBytes().length).setEndpoint(endpoint).setMethod(HttpMethod.POST).build();
        request.setResourcePath(VCMResourcePathConstants.SEARCH_ALARM);
        SearchAlarmResponse result = doOperation(request, ResponseParsers.searchAlarmResponseParser, true);
        return result;
    }
}
